package database

import (
	"fmt"
	"log"
	"mallgo/config"
	productModel "mallgo/internal/resources/product/model"
	userModel "mallgo/internal/resources/user/model"
	"time"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

func InitGorm(cfg *config.Config) *gorm.DB {
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=True&loc=Local",
		cfg.Database.Username,
		cfg.Database.Password,
		cfg.Database.Host,
		cfg.Database.Port,
		cfg.Database.DBName,
		cfg.Database.Charset,
	)

	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		log.Fatalf("failed to connect to database: %v", err)
	}
	//db = db.Set("gorm:table_options", "ENGINE=InnoDB")
	db.AutoMigrate(&userModel.UserInfo{})
	db.AutoMigrate(&userModel.UserAccount{})
	db.AutoMigrate(&userModel.UserPassword{})
	db.AutoMigrate(&productModel.Product{})

	db.AutoMigrate(&productModel.ProductCatalog{})

	// 设置连接池参数
	sqlDB, err := db.DB()
	if err != nil {
		panic("failed to get database instance")
	}

	// 设置最大连接数
	sqlDB.SetMaxOpenConns(50) // 设置最大打开连接数
	// 设置最大空闲连接数
	sqlDB.SetMaxIdleConns(10) // 设置最大空闲连接数
	// 设置连接最大生命周期
	sqlDB.SetConnMaxLifetime(10 * time.Minute) // 设置连接最大生命周期

	return db
}
